//
// Created by ct on 2020/12/2.
//

#ifndef SEALUCIA_LOG_PARSER_H
#define SEALUCIA_LOG_PARSER_H

#include <string>
#include <fstream>
#include <memory>
#include <queue>
#include <utility>
#include <iostream>

namespace peer_log_parser {
    typedef std::shared_ptr<std::queue<std::string> > queue_sp;

    class log_parser {
    public:
        explicit log_parser(std::string filepath,
                            std::string date_str,
                            std::uint16_t max,
                            std::string index_str);

        ~log_parser() = default;

    public:
        // 根据参数获取指定的日志
        std::string result();

    private:
        // 绝对路径
        std::string file_path;
        // 读取模式,只读
        std::ifstream in;
        // 解析结果存放在list
        queue_sp result_queue;
        // 获取指定某天
        std::string date_str;
        // 最大多少条数据
        std::uint16_t max_line;
        // 获取指定信息
        std::string index;

        std::string queue_to_json();

        // 替换指定的所有字符，但不会因为改变原字符后在次替换出新的指定字符，
        // 如 12212  替换 12 为 21 ，结果是   21221
        static std::string &replace_all_distinct(std::string &str,
                                                 const std::string &old_value,
                                                 const std::string &new_value);
    };
}

#endif //SEALUCIA_LOG_PARSER_H
